package greddy;

public class _03_53_最大子数组和 {
    public static int maxSubArray(int[] nums) {
    	int sum = Integer.MIN_VALUE;
    	int count = 0;
    	/*
    	 * 从头开始加，然后算 不断加的过程中 拿到的最大值
    	 * 当区间和小于等于0，说明前面的区间计算完了，重置为0，进入下一个区间的计算
    	 * 为什么小于等于0就计算完区间了呢？
    	 *   当区间和是0和负数：
    	 * 	   后面的数如果是负数，负数+负数会导致结果更小
    	 *     后面的数如果是正数，那直接从这个正数开始计算，和会比从负数开始计算要大
    	 * 区间有可能全部是负数，那么最大值就是最大的一个负数，由于我们加完会统计max，所以这个负数能正常获得
    	 * */
    	for(int i = 0; i < nums.length; i++) {
    		count += nums[i];
    		sum = Math.max(sum, count);
    		if(count <= 0) {
    			count = 0;
    		}
    	}
    	
    	return sum;
    }
    
    public static void main(String[] args) {
    	int[] nums = {-2,-1};
		System.out.println(maxSubArray(nums));
	}
}
